{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# livelossplot example: PyTorch\n",
    "\n",
    "Last update: `livelossplot 0.5.0`. For code and documentation, see [livelossplot GitHub repository](https://github.com/stared/livelossplot).\n",
    "\n",
    "<a href=\"https://colab.research.google.com/github/stared/livelossplot/blob/master/examples/pytorch.ipynb\" target=\"_parent\">\n",
    "    <img src=\"https://colab.research.google.com/assets/colab-badge.svg\"/>\n",
    "</a>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "!pip install livelossplot --quiet"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "import torch\n",
    "from torch import nn\n",
    "from torch import optim\n",
    "from torch.utils.data import TensorDataset, DataLoader\n",
    "\n",
    "from livelossplot import PlotLosses"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "base_string = \"()()\" + (32 - 4) * \" \"\n",
    "\n",
    "def shuffle_string(s):\n",
    "    indices = np.arange(len(s), dtype='uint8')\n",
    "    np.random.shuffle(indices)\n",
    "    return \"\".join(base_string[i] for i in indices)\n",
    "\n",
    "def is_correct(seq):\n",
    "    open_brackets = 0\n",
    "    val = {\"(\": 1, \" \": 0, \")\": -1}\n",
    "    for c in seq:\n",
    "        open_brackets += val[c]\n",
    "        if open_brackets < 0:\n",
    "            return False\n",
    "    return open_brackets == 0\n",
    "\n",
    "char2id = {\" \": 0, \"(\": 1, \")\": 2}\n",
    "\n",
    "def generate_pairs(size):\n",
    "    X = np.zeros((size, 3, len(base_string)), dtype='float32')\n",
    "    Y = np.zeros((size), dtype='int64')\n",
    "    for i in range(size):\n",
    "        s = shuffle_string(base_string)\n",
    "        Y[i] = int(is_correct(s))\n",
    "        for j, c in enumerate(s):\n",
    "            X[i, char2id[c], j] = 1.\n",
    "    return X, Y\n",
    "\n",
    "def generate_train_test_pairs(size):\n",
    "    X, Y = generate_pairs(size)\n",
    "    return train_test_split(X, Y, test_size=0.25, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(   )                 (    )     - correct\n"
     ]
    }
   ],
   "source": [
    "x = shuffle_string(base_string)\n",
    "print(x, \"- correct\" if is_correct(x) else \"- incorrect\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "X_train, X_test, Y_train, Y_test = generate_train_test_pairs(1000)\n",
    "\n",
    "trainloader = DataLoader(TensorDataset(torch.from_numpy(X_train), torch.from_numpy(Y_train)),\n",
    "                         batch_size=32, shuffle=True)\n",
    "testloader = DataLoader(TensorDataset(torch.from_numpy(X_test), torch.from_numpy(Y_test)),\n",
    "                         batch_size=32, shuffle=False)\n",
    "\n",
    "dataloaders = {\n",
    "    \"train\": trainloader,\n",
    "    \"validation\": testloader\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "class Recurrent(nn.Module):\n",
    "    def __init__(self, rnn_size):\n",
    "        super(Recurrent, self).__init__()\n",
    "        self.gru = nn.GRU(input_size=3, hidden_size=rnn_size)\n",
    "        self.fc = nn.Linear(rnn_size, 2)\n",
    "\n",
    "    def forward(self, x):\n",
    "        x = x.permute(2, 0, 1)\n",
    "        output, hidden = self.gru(x)\n",
    "        return self.fc(hidden.squeeze(0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "# train on cuda if available\n",
    "device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')\n",
    "\n",
    "def train_model(model, criterion, optimizer, num_epochs=10):\n",
    "    liveloss = PlotLosses()\n",
    "    model = model.to(device)\n",
    "    \n",
    "    for epoch in range(num_epochs):\n",
    "        logs = {}\n",
    "        for phase in ['train', 'validation']:\n",
    "            if phase == 'train':\n",
    "                model.train()\n",
    "            else:\n",
    "                model.eval()\n",
    "\n",
    "            running_loss = 0.0\n",
    "            running_corrects = 0\n",
    "\n",
    "            for inputs, labels in dataloaders[phase]:\n",
    "                inputs = inputs.to(device)\n",
    "                labels = labels.to(device)\n",
    "\n",
    "                outputs = model(inputs)\n",
    "                loss = criterion(outputs, labels)\n",
    "\n",
    "                if phase == 'train':\n",
    "                    optimizer.zero_grad()\n",
    "                    loss.backward()\n",
    "                    optimizer.step()\n",
    "\n",
    "                _, preds = torch.max(outputs, 1)\n",
    "                running_loss += loss.detach() * inputs.size(0)\n",
    "                running_corrects += torch.sum(preds == labels.data)\n",
    "\n",
    "            epoch_loss = running_loss / len(dataloaders[phase].dataset)\n",
    "            epoch_acc = running_corrects.float() / len(dataloaders[phase].dataset)\n",
    "            \n",
    "            prefix = ''\n",
    "            if phase == 'validation':\n",
    "                prefix = 'val_'\n",
    "\n",
    "            logs[prefix + 'log loss'] = epoch_loss.item()\n",
    "            logs[prefix + 'accuracy'] = epoch_acc.item()\n",
    "        \n",
    "        liveloss.update(logs)\n",
    "        liveloss.send()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "model = Recurrent(8)\n",
    "criterion = nn.CrossEntropyLoss()\n",
    "optimizer = optim.Adam(model.parameters(), lr=0.003)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": "<Figure size 864x576 with 2 Axes>"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "log-loss\n\tlog loss         \t (min:    0.029, max:    0.645, cur:    0.029)\n\tval_log loss     \t (min:    0.042, max:    0.629, cur:    0.046)\nacccuracy\n\tval_accuracy     \t (min:    0.672, max:    0.992, cur:    0.980)\n\taccuracy         \t (min:    0.665, max:    0.995, cur:    0.995)\n"
     ]
    }
   ],
   "source": [
    "train_model(model, criterion, optimizer, num_epochs=20)"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.4"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "source": [],
    "metadata": {
     "collapsed": false
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
